package br.com.petsis.funcionalidades.manterProduto;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage.Severity;

import br.com.petsis.entity.Produto;

@Name("manterProdutoController")
@Scope(ScopeType.CONVERSATION)
//@Restrict(value="#{identity.hasRole('Administrador')}")
public class ManterProdutoController {
	
	private static final String QRY_PRODUTOS = "select p from Produto p where p.flgAtivo = 'T'";

	@In(create=true)
	private EntityManager entityManager;
	
	private List<Produto> listaProdutos;
	
	private Produto produtoEdicao;
	
	private boolean selecionadoTodos;
	
	public void onLoad(){
		
	}
	
	public void onLoadList(){
		produtoEdicao = new Produto();
	}
	
	public String novoProduto(){
		return "novo";
	}

	public List<Produto> getListaProdutos() {
		if (listaProdutos == null) {
			listaProdutos = entityManager.createQuery(QRY_PRODUTOS).getResultList();
		}
		return listaProdutos;
	}

	public void setListaProdutos(List<Produto> listaProdutos) {
		this.listaProdutos = listaProdutos;
	}

	public Produto getProdutoEdicao() {
		if (produtoEdicao == null) {
			produtoEdicao = new Produto();
		}
		return produtoEdicao;
	}

	public void setProdutoEdicao(Produto produtoEdicao) {
		this.produtoEdicao = produtoEdicao;
	}
	
	public void excluir(){
		List<Produto> listaRemocao = new ArrayList<Produto>();
		for(Produto p : listaProdutos){
			if(p.isSelecionado()){
				p.setFlgAtivo('F');
				entityManager.merge(p);
				listaRemocao.add(p);
			}
		}
		entityManager.flush();
		setSelecionadoTodos(false);
		getListaProdutos().removeAll(listaRemocao);
	}
	
	public String salvar(){
		produtoEdicao.setFlgAtivo('T');
		Produto produtoSalvo = entityManager.merge(produtoEdicao);
		entityManager.flush();
		
		if(!getListaProdutos().contains(produtoSalvo)){
			getListaProdutos().add(produtoSalvo);
		}
		
		produtoEdicao = new Produto();
		FacesMessages.instance().add(Severity.INFO,"Produto salvo com sucesso.");
		return "persisted";
	}
	
	public String voltar(){
		return "voltar";
	}
	
	public String editar(Produto produto){
		produtoEdicao = produto;
		return "editar";
	}

	public boolean isSelecionadoTodos() {
		return selecionadoTodos;
	}

	public void setSelecionadoTodos(boolean selecionadoTodos) {
		this.selecionadoTodos = selecionadoTodos;
	}
	
	public void selecionaTodos(){
		for(Produto p : listaProdutos){
			if(isSelecionadoTodos()){
				p.setSelecionado(true);
			}else{
				p.setSelecionado(false);
			}
		}
	}
	
}
